/*
 * Copyright (c) 2013, 5 Idiots. All rights reserved.
 */
package safari.model.sell;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import safari.model.common.CommonConstants;
import safari.model.common.ListVO;
import safari.model.common.PagingBean;
import safari.model.member.MemberVO;
/**
 * SellBoardServiceImpl 클래스
 * @author Harry
 *
 */
public class SellBoardServiceImpl implements SellBoardService {
	private SellBoardDao sellBoardDao;
	/**
	 * SellBoardServiceImpl의 생성자 
	 * 이 생성자의 인자값에 Spring DI 기법으로 sellBoardDao bean을 주입해서 
	 * sellBoardDao를 사용한다.
	 * @param sellBoardDao
	 */
	public SellBoardServiceImpl(SellBoardDao sellBoardDao){
		this.sellBoardDao=sellBoardDao;
	}
	/**
	 * 판매 글을 작성하는 메서드
	 * 글 등록 성공시 글 상세보기 페이지로 이동한다.
	 */
	@Override
	public SellBoardVO writeContent(SellBoardVO svo) throws SQLException {
		sellBoardDao.insertContent(svo);
		return svo=sellBoardDao.selectContent(svo.getSellNo());
	}
	/**
	 * 해당 글을 삭제하는 메서드
	 * 업로드 했던 파일 및 DB 데이터를 삭제한다.
	 */
	@Override
	public void deleteContent(SellBoardVO svo) throws SQLException {
		sellBoardDao.deleteContent(svo);
	}
	/**
	 * 해당 글을 수정하는 메서드
	 */
	@Override
	public SellBoardVO updateContent(SellBoardVO svo) throws SQLException {
		sellBoardDao.updateContent(svo);
		return svo=sellBoardDao.selectContent(svo.getSellNo());
	}
	/**
	 * 해당 글을 수정하는 메서드 (파일명을 제외한 정보를 수정)
	 */
	@Override
	public SellBoardVO updateContentExceptFile(SellBoardVO svo)
			throws SQLException {
		sellBoardDao.updateContentExceptFile(svo);
		return svo=sellBoardDao.selectContent(svo.getSellNo());
	}
	/**
	 * 판매 글 수정 페이지를 보여주는 메서드
	 */
	@Override
	public SellBoardVO updateView(int sellNo) throws SQLException {
		return sellBoardDao.selectContent(sellNo);
	}
	/**
	 * 검색어를 이용해서 게시판을 조회하는 메서드
	 */
	@Override
	public ListVO getContentListByKeyword(SellBoardSearchVO sbsvo) throws SQLException {
		List<SellBoardVO> list=null;
		// 전체 게시물 수
		int totalContents=0;
		// 사용자가 클릭한 페이징 번호
		int nowPage=sbsvo.getNowPage();
		// 한 페이지에서 보여줄 게시글 수(10개)를 세팅한다.
		sbsvo.setContentNumberPerPage(CommonConstants.CONTENT_NUMBER_PER_PAGE);
		// 검색 조건(제목, 내용, 상품명...)
		String[] searchType=sbsvo.getSearchType();
		for(int i=0;i<searchType.length;i++){
			if(searchType[i].equals("findByTitle")){
				list=sellBoardDao.selectContentListByTitle(sbsvo);
				totalContents=sellBoardDao.selectTotalContentsByTitle(sbsvo.getKeyword());
				break;
			}else if(searchType[i].equals("findByContent")){
				list=sellBoardDao.selectContentListByContent(sbsvo);
				totalContents=sellBoardDao.selectTotalContentsByContent(sbsvo.getKeyword());
				break;
			}else if(searchType[i].equals("findByProductName")){
				list=sellBoardDao.selectContentListByProductName(sbsvo);
				totalContents=sellBoardDao.selectTotalContentsByProductName(sbsvo.getKeyword());
				break;
			}
		}
		ListVO lvo=new ListVO(list, new PagingBean(totalContents, nowPage));
		return lvo;
	}
	/**
	 * 상세 글 보기 페이지를 불러오는 메서드
	 * 글 작성자가 자신의 글을 조회할때는 조회수를 증가시키지 않는다.
	 * 글 작성자 외의 회원들이 해당 글을 조회할때는 조회수를 1 증가시킨다.
	 */
	@Override
	public SellBoardVO showContent(int sellNo, String id) throws SQLException {
		// 조회수를 1 증가 시키는 메서드
		Map updateHitsVO=new HashMap();
		updateHitsVO.put("sellNo", sellNo);
		updateHitsVO.put("id", id);
		sellBoardDao.updateHits(updateHitsVO);
		// 상세 글 보기 페이지를 불러오는 메서드
		return sellBoardDao.selectContent(sellNo);
	}
	/**
	 * 게시판 목록을 보여주는 메서드
	 */
	@Override
	public ListVO getContentList(int nowPage) throws SQLException {
		// 사용자가 클릭한 페이징 번호로 게시판 목록 불러오기
		List<SellBoardVO>list=sellBoardDao.selectContentList(nowPage);
		// 총 게시물 수 불러오기
		int totalContents=sellBoardDao.selectTotalContents();
		// 총 게시물 수와 해당 페이징 번호를 PagingBean 클래스 생성자의 인자값으로 사용한다.
		// ListVO 클래스 생성자의 인자값으로 게시판 목록과 페이징 빈을 사용하였다.
		ListVO lvo=new ListVO(list, new PagingBean(totalContents, nowPage));
		return lvo;
	}
	/**
	 * DB에 저장된 파일명(원본파일명, 저장된 파일명)을 삭제하는 메서드
	 */
	@Override
	public void deleteFileName(String filename) throws SQLException {
		sellBoardDao.deleteFileName(filename);
	}
	/**
	 * 상품명으로 검색할때 검색어를 기록하는 메서드
	 * 메인페이지에서 '가장 많이 검색한 핫 키워드'를 보여주기 위해서 사용한다.
	 * 검색한 키워드가 처음 사용된 키워드면 insertHotKeyword, 
	 * 기존에 사용된 키워드면 updateHotKeyword를 한다.
	 */
	@Override
	public void recordHotKeyword(String keyword) throws SQLException {
		int result=0;
		result=sellBoardDao.updateHotKeyword(keyword);
		System.out.println("업데이트 성공여부..."+result);
		if(result==0)
			sellBoardDao.insertHotKeyword(keyword);
	}

}
